package LeetCode.interview;

import com.sun.jndi.url.iiopname.iiopnameURLContextFactory;

import util.LogUtils;

/*
 * 
原题

　　Given two binary strings, return their sum (also a binary string). 
　　For example, 
　　a = "11" 
　　b = "1" 
　　Return "100" 

题目大意

　　给定两个二进制的字符串，返回它们的和，也是二进行制字符串。 

解题思路
	直接思路，不需要拐弯。按位加，用flag 记住是否有进位，有是1，没有是0， 用StringBuilder, 最后的结果需要将StringBuilder  reverse。
	
 * @Date 2017-09-13 11：31
 */
public class _067_Add_Binary {
	public String addBinary(String a, String b) {
		if (a==null||a.equals("") || b==null||b.equals(""))	return "";
		StringBuilder sb = new StringBuilder();
		int pa = a.length()-1, pb = b.length()-1;
		int flag = 0;				//是否需要进位， 0：不需要， 1：需要
		while (pa>=0 || pb>=0) {
			int va = 0, vb = 0;			//假如a或b已经取完，默认为0(前导0)
			if (pa >= 0) {
				va = a.charAt(pa)-'0';	//将二进制字符转换为int  eg：'1'-'0' 结果为
				pa--;
			}
			if (pb >= 0) {
				vb = b.charAt(pb)-'0';
				pb--;
			}
			int sum = va + vb + flag;
			if (sum >= 2) {
				sb.append(sum - 2);
				flag = 1;
			} else {
				sb.append(sum);
				flag = 0;
			}
		}
		if (flag == 1)
			sb.append(1);
		return sb.reverse().toString();
	}
	
	private void traverse (int[] binarys) {
		for (int i : binarys) 
			LogUtils.print(i);
	}
	public static void main(String[] args) {
		LogUtils.println("结果", new _067_Add_Binary().addBinary("11", "1"));
	}
}
